home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Symbol.C < prev    next >
C/C++ Source or Header  |  1992-05-05  |  1KB  |  73 lines

  1. #ifdef __GNUG__
  2. #pragma implementation
  3. #endif
  4.  
  5. #include "Symbol.h"
  6.  
  7. #include "Class.h"
  8. #include "String.h"
  9.  
  10. //---- SymbolTable -------------------------------------------------------------
  11.  
  12. static SymbolTable gSymTab;
  13.     
  14. char **SymbolTable::table;
  15.  
  16. NewMetaImpl(SymbolTable,Object, (TSP(table)));
  17.  
  18. SymbolTable::SymbolTable()
  19. {
  20. }
  21.  
  22. SymbolTable::~SymbolTable()
  23. {
  24.     if (table) {
  25.     for (int i= 1; table[i]; i++)
  26.         SafeDelete(table[i]);
  27.     SafeDelete(table);
  28.     }
  29. }
  30.  
  31. u_int SymbolTable::Lookup(char *name)
  32. {
  33.     if (table && name)
  34.     for (int i= 0; table[i]; i++)
  35.         if (strcmp(table[i], name) == 0)
  36.         return (u_int) table[i];
  37.     return 0;
  38. }
  39.  
  40. u_int SymbolTable::MakeId(char *name)
  41. {
  42.     if (name) {
  43.     if (table == 0)
  44.         table= new char* [300];
  45.     for (int i= 0; table[i]; i++)
  46.         if (strcmp(table[i], name) == 0)
  47.         break;
  48.     if (table[i] == 0)
  49.         table[i]= strsave(name);
  50.     return (u_int) table[i];
  51.     }
  52.     return 0;
  53. }
  54.  
  55. //---- Symbol ------------------------------------------------------------------
  56.  
  57. IStream& Symbol::ReadFrom(IStream &s)
  58. {
  59.     char name[200];
  60.     
  61.     s >> name;
  62.     id= SymbolTable::MakeId(name);
  63.     return s;
  64. }
  65.  
  66. SimpleMetaImpl(Symbol)
  67. {
  68.     len= len;
  69.     if (! isptr)
  70.     sprintf(buf, "%s", ((Symbol*)addr)->AsString());
  71. }
  72.  
  73.